package com.ai3d.rfid.common.libs

import android.app.Application
import androidx.multidex.MultiDex
import cat.ereza.customactivityoncrash.config.CaocConfig
import com.ai3d.rfid.base.app.App
import com.ai3d.rfid.common.callback.EmptyCallback
import com.ai3d.rfid.common.callback.ErrorCallback
import com.ai3d.rfid.common.callback.LoadingCallback
import com.ai3d.rfid.common.event.TimeTickReceiver
import com.ai3d.rfid.common.proxy.MMKVProxy
import com.bj.disc.activity.MainActivity
import com.kingja.loadsir.callback.SuccessCallback
import com.kingja.loadsir.core.LoadSir

/**
 * @ProjectName : Kolb
 * @Author : weijinsong
 * @Time : 2023/1/4 11:31
 * @Description : 文件描述
 */
object InitMgr {
    /**
     * 初始化MultiDex
     */
    fun initMultiDex(application: Application) {
        MultiDex.install(application)
    }

    /**
     * 初始化MMKV存储
     */
    fun initMMKV(application: Application) {
        MMKVProxy.initMMKV(application)
    }

    /**
     * 初始化第三方加载框架 management and initialization of ui loading
     */
    fun initLoadSir() {
        LoadSir.beginBuilder()
            .addCallback(LoadingCallback())
            .addCallback(ErrorCallback())
            .addCallback(EmptyCallback())
            .setDefaultCallback(SuccessCallback::class.java)//default loading status page
            .commit()
    }

    /**
     * 初始化崩溃处理
     */
    fun initCaoConfig() {
        //防止项目崩溃，崩溃后打开错误界面
        CaocConfig.Builder.create()
            .backgroundMode(CaocConfig.BACKGROUND_MODE_SILENT) //default: CaocConfig.BACKGROUND_MODE_SHOW_CUSTOM
            .enabled(true)//是否启用CustomActivityOnCrash崩溃拦截机制 必须启用
            .showErrorDetails(false) //是否必须显示包含错误详细信息的按钮 default: true
            .showRestartButton(false) //是否必须显示“重新启动应用程序”按钮或“关闭应用程序”按钮default: true
            .logErrorOnRestart(false) //是否必须重新堆栈堆栈跟踪 default: true
            .trackActivities(true) //是否必须跟踪用户访问的活动及其生命周期调用 default: false
            .minTimeBetweenCrashesMs(2000) //应用程序崩溃之间必须经过的时间 default: 3000
            .restartActivity(MainActivity::class.java) // 重启的activity
//            .errorActivity(ErrorActivity::class.java) //发生错误跳转的activity
            .apply()
    }


    /**
     * 初始化App设置
     */
    fun initSetting(app: App) {
        InitLanguage.init(app)
    }

    private var timeReceiver = TimeTickReceiver()

    /**
     * 注册广播
     */
    fun register(app: App) {
        TimeTickReceiver.register(app, timeReceiver)
    }

    /**
     * 解绑广播
     */
    fun unregisterReceiver(app: App) {
        app.unregisterReceiver(timeReceiver)
    }
}